thinkPHP独立验证的正确姿势
简介:
坦白的说,个人在用thinkPHP的时候,还是很喜欢他自带的验证器的,毕竟对中文的支持非常好,配合错误页面,可以快速的将出现的问题写出来。
因为我每个表单在需求上可能不一样,所以我在使用时,独立验证会比较多,根据文档,他在使用的Validate类的make方法的时候,给出了三个参数,$rule,$msg,$field,分别代表验证规则,验证错误提示信息,字段名称。
根据文档所说,我可以第二个参数设为空,第三个填上那个字段名代表的中文释义,在报错信息中将会用中文释义替换原本出现的key值,来让我们看看根据文档的用法。
用法一:
$rule = [
'name' => 'require|min:6' //验证name字段,不可为空或不存在,最低不得少于6个字符
];
$data = [ //模拟一个表单提交的数据
'name' => 'abc'
];
$val = \Validate::make($rule); //通过facade,静态调用验证类(上面都不用use),创建一个独立验证器
if(!$val->check($data)){ //进行验证
return $this->error($val->getError()); //如果报错,直接将信息配合错误页面打出
}
此时的报错信息为:name长度不能小于6。
这种报错信息很明显,如果我写的key值足够难看,这个报错信息毫无意义嘛。
所以,让我们修改修改上面的代码,如下:
用法二:
$rule = [
'name' => 'require|min:6'
];
$msg = [
'name.min' => '一个骚气的名字怎么可能低于六位!!', // 设置报错信息
];
$data = [
'name' => 'abc'
];
$val = \Validate::make($rule, $msg); //填写第二个参数,将错误信息填入
if(!$val->check($data)){
return $this->error($val->getError());
}
不用说了,报错信息,就是我们写的那个,但是,我懒啊!这是只写了一个规则的的,如果我字段多的话,每个字段还有那么多的验证规则,我不累死了,所以,我又用了第三个参数来让我少写点来,再改改
用法三:
$rule = [
'name' => 'require|min:6'
];
$field = [
'name' => '一个霸气的名字', // 告诉验证器,这个name字段叫……名字
];
$data = [
'name' => 'abc'
];
$val = \Validate::make($rule, [], $field); //第二个参数留空,第三个参数写入
if(!$val->check($data)){
return $this->error($val->getError());
}
报错信息呢就是将上面第一次的name值给替换掉,报错信息为:一个霸气的名字长度不能小于6,即便是其他的验证也会按照默认的规则将name值替换掉,所以,这个方法很合理。
但是!我发现还能写的更少,直到我在文档某篇其他不相关的地方里,发现了这么一种写法:
$rule = [
'name|用户名' => 'require|min:6'
];
喵喵喵?你文档也没说可以这样玩啊?
然后,我翻了翻源码,嗯……确实可以这么写,而且,注释都写得明白的:
意思挺清楚了,如果你的key值里面有“|”,那么竖线后面的东西就是描述,所以~
终极写法:
$data = [
'name' => 'abc'
];
$val = \Validate::make([
'name|一个神奇的名字' => 'require|min:6', //仅需一个参数,那就直接往里面怼
'email|信鸽到达的地方' => 'require|email',
]);
if(!$val->check($data)){
return $this->error($val->getError());
}
如此下来,最省事的办法就是这种写法了,而且可读性也不低,最懒写法即如此。
亲测有效~
封面收尾:
写的很好 继续努力